// 封装axios请求模块
// 导入axios
import axios from 'axios';
// 导入store
// 原本要写index.js的，但是由于默认就会识别index.js，因此省略了
// import store form '@/store/index.js';
import store from '@/store';

// 导入jsonBig安装包
import jsonBig from 'json-bigint';
const request = axios.create({
  baseURL: 'http://toutiao-app.itheima.net',
  // transformResponse 允许自定义原始的响应数据（字符串）

  // 自定义后端返回的原始数据
  // data 是后端返回的原始数据，说白了就是JSON格式的字符串
  transformResponse: [
    function (data) {
      try {
        // 如果转换成功则返回转换的数据结果
        return jsonBig.parse(data);
      } catch (err) {
        // 如果转换失败，则包装为统一数据格式并返回
        return {
          data,
        };
      }
    },
  ],
});

// 设置请求拦截器

request.interceptors.request.use(
  function (config) {
    // 请求发起会经过这里
    // config 本次的请求的请求配置对象
    // 从state里面将user解构出来
    const { user } = store.state;
    // 在请求拦截器里面的config配置对象统一配置请求的请求头
    if (user && user.token) {
      config.headers.Authorization = `Bearer ${user.token}`;
    }
    // 注意：这里务必要返回一个config配置对象，否则请求就会停留在这里发布出去
    return config;
  },
  function (error) {
    // 如果请求出错了(还没有发出去)会经过这里
    return Promise.reject(error);
  },
);
export default request;
